A network is a collection of components connected to each other such that communication between the components can be carried out. A network, for example, can be a computer network containing thousands of computers coupled together to exchange digital information, or a telephone network with millions of telephones exchanging audio information. Networks may also be collections of entities or phenomena that have specific interactions, such as buyers and sellers in a market. Networks may also be organic, such as a brain with billions of neurons interconnected at synapses. Regardless of the type of network under consideration, it is often useful to abstract the network and simulate its behavior.
A network simulator is typically a computer abstraction of the network. A simulator can help design better networks, trouble shoot network problems, and discover how a network behaves. In general, simulators abstract networks as a collection of nodes interconnected by edges. This arrangement is often visualized as circles connected by lines, where the circles represent nodes and the lines representing edges.
Both nodes and edges are computational elements capable of having states associated with them. For instance, a node can have a voltage associated with it and an edge can have a weight associated with it. An edge connects a source node to a destination node, and may perform a transformation of the source node state variables before delivering them to the destination node. The destination node recalculates its new state based on all the inputs from edges that it receives. In the neural network simulation, for example, nodes model neurons and carry out computations, while edges model synapses and transmit the results from one node to other nodes. As mentioned, however, it is possible for the edges to perform computations as well. These synaptic computations may be simple, such as weighting of the connection strength between neurons, or more complex, such as varying the connection strength over time.
There are generally two conventional approaches to simulating networks. In a first approach, network models are “hard wired” in a special-purpose simulation program such that networks are simulated with very specific models for edges and nodes. Thus, the simulation infrastructure and models are generally designed and implemented with software code that is dependent on specific model implementations. Although such an approach provides fast simulation performance, flexibility is severely limited. Adding an additional component or a component application programming interface (API) often requires modifying the simulation infrastructure and possibly other component APIs or implementations. Thus, a simulation program using this first approach would likely need to be substantially rewritten if different nodes, edges, or topologies are desired.
In a second common approach, the simulation infrastructure and the components interact via compile-time APIs. The components, however, interact with each other through dynamically constructed and interpreted messages. Thus, a new component can be added without changing the component interaction, existing components, or component APIs. Adding a new mode of component interaction is accomplished by establishing a new message format. New message formats generally only affect the components that use them, which are most often new components. The cost of this flexibility, however, is run-time performance. Slower simulation performance is principally due to the dynamic construction and interpretation of the messages. Dynamic message construction and interpretation is typically an order of magnitude slower than interaction using compile-time interfaces.
Additionally, for some network simulation requirements, conventional simulation approaches may not suffice. Consider again the task of simulating a neural network. For certain abstractions the initial configuration of the network does not change during the simulation. Such a configuration is called a static configuration. Static configuration is useful in simulating a neural network over short time scales. During short time intervals the number of neurons may be considered constant and the relationships between them (the connections between axons and the dendrites or cell body) do not change.
For other simulations, however, the initial configuration may change over time. In this dynamic case, the variation may be due to the introduction or elimination of components or changes in the neurons over a longer time scale. Through the process of neurogenesis, new neurons may be introduced into the network. Conversely, existing neurons may die. Furthermore, new connections between neurons may be formed or eliminated. Changes to the configuration may be effected by the underlying simulation infrastructure or by the components themselves. In this latter case, there must be means for components to be dynamically created and to discover other components.
Moreover, in some models the effects of a relationship on model behavior may be parameterized. For such models, there must be a means for setting these parameters during the configuration process. These parameters are a property of the relationship, not of any of the components participating in the relationship. For example, consider again the neural network simulation. The effect of a connection on a post-synaptic neuron depends on where that connection is made. A connection onto the cell body will have a larger effect than one on the dendrite. The connection location is not a property of either participating neuron, since each neuron may participate in many such connections. Rather, it is a property of the connection itself.